Query Retries
当useQuery查询失败时(查询函数抛出错误),TanStack Query会自动重试该查询,前提是该查询的请求尚未达到最大连续重试次数(默认为3次),或者提供了一个函数来确定是否允许重试。
您可以在全局级别和单个查询级别上配置重试。
- 设置
retry = false
将禁用重试。 - 设置
retry = 6
将在显示函数抛出的最终错误之前,重试失败的请求6次。 - 设置
retry = true
将无限次重试失败的请求。 - 设置
retry = (failureCount, error) => ...
允许根据请求失败的原因进行自定义逻辑。
import { useQuery } from '@tanstack/react-query'
// 使特定查询重试一定次数
const result = useQuery({
queryKey: ['todos', 1],
queryFn: fetchTodoListPage,
retry: 10, // 在显示错误之前将重试失败的请求10次
})
Retry Delay(重试延迟)
默认情况下,TanStack Query中的重试不会在请求失败后立即发生。按照标准做法,逐渐为每个重试尝试应用back-off delay。
默认的retryDelay
设置为每次尝试时加倍(从1000毫秒开始),但不超过30秒:
tsx
// 为所有查询进行配置
import {
QueryCache,
QueryClient,
QueryClientProvider,
} from '@tanstack/react-query'
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
})
function App() {
return <QueryClientProvider client={queryClient}>...</QueryClientProvider>
}
虽然不建议这样做,但您可以在提供程序和单个查询选项中覆盖retryDelay函数/整数。如果设置为整数而不是函数,则延迟时间始终是相同的:
const result = useQuery({
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // 无论重试多少次,始终等待1000毫秒后重试
})